package clinsistem.c.repositorio;

import java.sql.*;
import java.util.LinkedList;
import clinsistem.b.negocio.entidades.*;

public class RepositorioPaciente {
	
	public Paciente buscarPacienteID(int id) throws Exception {
		Statement stmt = null;
		ResultSet rs=null;
		Paciente p = null;
		
		stmt = ConexaoBD.getInstance().createStatement();
		rs = stmt.executeQuery("SELECT  * FROM paciente WHERE id = "+id+" AND status = 'ATIVO';");
			
		if (rs.next()) {
			p= new Paciente(rs.getInt("id"), rs.getString("nome"), rs.getString("prontuario"), new Data(rs.getString("nascimento")), rs.getString("status"), rs.getString("cpf"), rs.getString("sexo"), rs.getString("mae"), rs.getString("pai"), rs.getString("estado_civil"), rs.getString("cor"), rs.getString("email"), new Endereco(rs.getString("logradouro"), rs.getString("numero"), rs.getString("complemento"), rs.getString("bairro"), rs.getString("cep"), rs.getString("cidade"), rs.getString("estado")), rs.getString("telefone1"), rs.getString("telefone2"), rs.getString("escolaridade"), rs.getString("rg"), rs.getString("cartao_sus") );
		}
		
		return p;
	}
	
	public boolean existe(Paciente paciente) throws Exception {
		Statement stmt = null;
		ResultSet rs = null;
		
		stmt = ConexaoBD.getInstance().createStatement();
		if (paciente.getCpf()==null||paciente.getCpf().equals("")) {
			rs = stmt.executeQuery("SELECT * FROM paciente WHERE rg = '"+paciente.getRg()+"';");
			return rs.next();
		}
		else if (paciente.getRg()==null||paciente.getRg().equals("")) {
			rs = stmt.executeQuery("SELECT * FROM paciente WHERE cpf = '"+paciente.getCpf()+"';");
			return rs.next();
		}
		else {
			rs = stmt.executeQuery("SELECT * FROM paciente WHERE cpf = '"+paciente.getCpf()+"' OR rg = '"+paciente.getRg()+"';");
			return rs.next();
		}
		
	}
	
	public void cadastrarPaciente(Paciente paciente) throws Exception { 
		Statement stmt = null;
		
		stmt = ConexaoBD.getInstance().createStatement();
		
		if (paciente.getCpf()==null||paciente.getCpf().equals(""))
			stmt.execute("INSERT INTO paciente(nome,rg,cartao_sus,prontuario,nascimento,status,sexo,mae,pai,estado_civil,cor,email,telefone1,telefone2,escolaridade,logradouro,numero,bairro,cep,complemento,cidade,estado) VALUES ('"+paciente.getNome()+"','"+paciente.getRg()+"','"+paciente.getCartaoSUS()+"','"+paciente.getProntuario()+"','"+paciente.getNascimento()+"','ATIVO','"+paciente.getSexo()+"','"+paciente.getNomeMae()+"','"+paciente.getNomePai()+"','"+paciente.getEstadoCivil()+"','"+paciente.getCor()+"','"+paciente.getEmail()+"','"+paciente.getTelefoneFixo()+"','"+paciente.getTelefoneCelular()+"','"+paciente.getEscolaridade()+"','"+paciente.getEndereco().getLogradouro()+"','"+paciente.getEndereco().getNumero()+"','"+paciente.getEndereco().getBairro()+"','"+paciente.getEndereco().getCEP()+"','"+paciente.getEndereco().getComplemento()+"','"+paciente.getEndereco().getCidade()+"','"+paciente.getEndereco().getEstado()+"');");
		else if (paciente.getRg()==null||paciente.getRg().equals(""))
			stmt.execute("INSERT INTO paciente(nome,cpf,cartao_sus,prontuario,nascimento,status,sexo,mae,pai,estado_civil,cor,email,telefone1,telefone2,escolaridade,logradouro,numero,bairro,cep,complemento,cidade,estado) VALUES ('"+paciente.getNome()+"','"+paciente.getCpf()+"','"+paciente.getCartaoSUS()+"','"+paciente.getProntuario()+"','"+paciente.getNascimento()+"','ATIVO','"+paciente.getSexo()+"','"+paciente.getNomeMae()+"','"+paciente.getNomePai()+"','"+paciente.getEstadoCivil()+"','"+paciente.getCor()+"','"+paciente.getEmail()+"','"+paciente.getTelefoneFixo()+"','"+paciente.getTelefoneCelular()+"','"+paciente.getEscolaridade()+"','"+paciente.getEndereco().getLogradouro()+"','"+paciente.getEndereco().getNumero()+"','"+paciente.getEndereco().getBairro()+"','"+paciente.getEndereco().getCEP()+"','"+paciente.getEndereco().getComplemento()+"','"+paciente.getEndereco().getCidade()+"','"+paciente.getEndereco().getEstado()+"');");
		else
			stmt.execute("INSERT INTO paciente(nome,cpf,rg,cartao_sus,prontuario,nascimento,status,sexo,mae,pai,estado_civil,cor,email,telefone1,telefone2,escolaridade,logradouro,numero,bairro,cep,complemento,cidade,estado) VALUES ('"+paciente.getNome()+"','"+paciente.getCpf()+"','"+paciente.getRg()+"','"+paciente.getCartaoSUS()+"','"+paciente.getProntuario()+"','"+paciente.getNascimento()+"','ATIVO','"+paciente.getSexo()+"','"+paciente.getNomeMae()+"','"+paciente.getNomePai()+"','"+paciente.getEstadoCivil()+"','"+paciente.getCor()+"','"+paciente.getEmail()+"','"+paciente.getTelefoneFixo()+"','"+paciente.getTelefoneCelular()+"','"+paciente.getEscolaridade()+"','"+paciente.getEndereco().getLogradouro()+"','"+paciente.getEndereco().getNumero()+"','"+paciente.getEndereco().getBairro()+"','"+paciente.getEndereco().getCEP()+"','"+paciente.getEndereco().getComplemento()+"','"+paciente.getEndereco().getCidade()+"','"+paciente.getEndereco().getEstado()+"');");
	}
	
	public LinkedList<Paciente> buscarPacienteNome(String nome) throws Exception {
		Statement stmt = null;
		ResultSet rs = null;
		LinkedList<Paciente> lista = new LinkedList<Paciente>();
		
		stmt = ConexaoBD.getInstance().createStatement();
		rs = stmt.executeQuery("SELECT * FROM paciente WHERE nome LIKE '%"+nome+"%' AND status = 'ATIVO' ORDER BY nome;");
			
		while(rs.next()) {
			lista.add(new Paciente(rs.getInt("id"), rs.getString("nome"), rs.getString("prontuario"),new Data(rs.getString("nascimento")), rs.getString("status"), rs.getString("cpf"),	rs.getString("sexo"), rs.getString("mae"), rs.getString("pai"), rs.getString("estado_civil"),rs.getString("cor"), rs.getString("email"), new Endereco(rs.getString("logradouro"),rs.getString("numero"), rs.getString("complemento"), rs.getString("bairro"),rs.getString("cep"), rs.getString("cidade"), rs.getString("estado")), rs.getString("telefone1"), rs.getString("telefone2"), rs.getString("escolaridade"), rs.getString("rg"), rs.getString("cartao_sus") ) );
		}
		
		return lista;
	}
	
	public Paciente buscarPacienteCPF(String cpf) throws Exception {
		Statement stmt = null;
		ResultSet rs=null;
		Paciente p = null;
		
		stmt = ConexaoBD.getInstance().createStatement();
		rs = stmt.executeQuery("SELECT  * FROM paciente WHERE cpf = '"+cpf+"' AND status = 'ATIVO';");
			
		if (rs.next()) {
			p= new Paciente(rs.getInt("id"), rs.getString("nome"), rs.getString("prontuario"), new Data(rs.getString("nascimento")), rs.getString("status"), rs.getString("cpf"), rs.getString("sexo"), rs.getString("mae"), rs.getString("pai"), rs.getString("estado_civil"), rs.getString("cor"), rs.getString("email"), new Endereco(rs.getString("logradouro"), rs.getString("numero"), rs.getString("complemento"), rs.getString("bairro"), rs.getString("cep"), rs.getString("cidade"), rs.getString("estado")), rs.getString("telefone1"), rs.getString("telefone2"), rs.getString("escolaridade"), rs.getString("rg"), rs.getString("cartao_sus") );
		}
		
		return p;
	}
	
	public Paciente buscarPacienteRG(String RG) throws Exception {
		Statement stmt = null;
		ResultSet rs = null;
		Paciente p = null;
		
		stmt = ConexaoBD.getInstance().createStatement();
		rs = stmt.executeQuery("SELECT  * FROM paciente WHERE rg = '"+RG+"' AND status = 'ATIVO';");
			
		if (rs.next()) {
			p= new Paciente(rs.getInt("id"), rs.getString("nome"), rs.getString("prontuario"), new Data(rs.getString("nascimento")), rs.getString("status"), rs.getString("cpf"), rs.getString("sexo"), rs.getString("mae"), rs.getString("pai"), rs.getString("estado_civil"), rs.getString("cor"), rs.getString("email"), new Endereco(rs.getString("logradouro"), rs.getString("numero"), rs.getString("complemento"), rs.getString("bairro"), rs.getString("cep"), rs.getString("cidade"), rs.getString("estado")), rs.getString("telefone1"), rs.getString("telefone2"), rs.getString("escolaridade"), rs.getString("rg"), rs.getString("cartao_sus") );
		}
		
		return p;
	}
	
	public void atualizarPaciente(Paciente paciente, String opcao) throws Exception {
		Statement stmt = null;
		
		stmt = ConexaoBD.getInstance().createStatement();
		if (opcao.equals("CPF")) {
			stmt.execute("UPDATE paciente SET prontuario = '"+paciente.getProntuario()+"', nome = '"+paciente.getNome()+"', nascimento = '"+paciente.getNascimento()+"', status='"+paciente.getStatus()+"', sexo = '"+paciente.getSexo()+"', mae = '"+paciente.getNomeMae()+"', pai = '"+paciente.getNomePai()+"', estado_civil = '"+paciente.getEstadoCivil()+"', cor = '"+paciente.getCor()+"', email = '"+paciente.getEmail()+"', telefone1 = '"+paciente.getTelefoneFixo()+"', telefone2 = '"+paciente.getTelefoneCelular()+"', escolaridade = '"+paciente.getEscolaridade()+"', cartao_sus = '"+paciente.getCartaoSUS()+"', logradouro = '"+paciente.getEndereco().getLogradouro()+"', numero = '"+paciente.getEndereco().getNumero()+"', bairro = '"+paciente.getEndereco().getBairro()+"', cep = '"+paciente.getEndereco().getCEP()+"', complemento = '"+paciente.getEndereco().getComplemento()+"', cidade = '"+paciente.getEndereco().getCidade()+"', estado = '"+paciente.getEndereco().getEstado()+"' WHERE cpf = '"+paciente.getCpf()+"';");
		}
		
		else if (opcao.equals("RG")) {
			stmt.execute("UPDATE paciente SET prontuario = '"+paciente.getProntuario()+"', nome = '"+paciente.getNome()+"', nascimento = '"+paciente.getNascimento()+"', status='"+paciente.getStatus()+"', sexo = '"+paciente.getSexo()+"', mae = '"+paciente.getNomeMae()+"', pai = '"+paciente.getNomePai()+"', estado_civil = '"+paciente.getEstadoCivil()+"', cor = '"+paciente.getCor()+"', email = '"+paciente.getEmail()+"', telefone1 = '"+paciente.getTelefoneFixo()+"', telefone2 = '"+paciente.getTelefoneCelular()+"', escolaridade = '"+paciente.getEscolaridade()+"', cartao_sus = '"+paciente.getCartaoSUS()+"', logradouro = '"+paciente.getEndereco().getLogradouro()+"', numero = '"+paciente.getEndereco().getNumero()+"', bairro = '"+paciente.getEndereco().getBairro()+"', cep = '"+paciente.getEndereco().getCEP()+"', complemento = '"+paciente.getEndereco().getComplemento()+"', cidade = '"+paciente.getEndereco().getCidade()+"', estado = '"+paciente.getEndereco().getEstado()+"' WHERE rg = '"+paciente.getRg()+"';");
		}
			
			
	}
}
